﻿using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using PizzaService.Model;

namespace PizzaService.Entities
{
    /// <summary>
    /// Speise
    /// </summary>
    public class Speise : ViewModelBase
    {
        public Speise()
        {
        }
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="oldFood"></param>
        public Speise(Speise oldFood)
        {
            m_ID = oldFood.ID;
            m_Name = oldFood.Name;
            m_Preis_klein = oldFood.Preis_klein;
            m_Preis_groß = oldFood.Preis_groß;
            m_Zutaten = new ObservableCollection<Zutat>(oldFood.Zutaten);
            m_Typ = oldFood.Typ;
            Size = oldFood.Size;

            if(oldFood.m_ExtraZutaten != null)
            m_ExtraZutaten = new ObservableCollection<ExtraZutat>(oldFood.m_ExtraZutaten);

            m_GesamtPreis = oldFood.GesamtPreis;
            m_AktuellerPizzaPreis = oldFood.AktuellerPizzaPreis;
        }

        // Enum to better define our food sizes
        public enum SizeEnum { Klein, Groß };
        public enum SpeiseTyp { 
            Salat = 0,
            Pizza = 1, 
            Pasta = 2
        };

        private int m_ID;
        public int ID
        {
            get { return m_ID; }
            set
            {
                if (value != m_ID)
                {
                    this.m_ID = value;
                    RaisePropertyChanged(() => ID);
                }
            }
        }
     
        

        private string m_Name;
        public string Name
        {
            get { return m_Name; }
            set
            {
                if (value != m_Name)
                {
                    this.m_Name = value;
                    RaisePropertyChanged(() => Name);
                }
            }
        }

        private decimal m_Preis_klein;
        public decimal Preis_klein
        {
            get { return m_Preis_klein; }
            set
            {
                if (value != m_Preis_klein)
                {
                    this.m_Preis_klein = value;
                    RaisePropertyChanged(() => Preis_klein);
                }
            }
        }

        private decimal m_Preis_groß;
        public decimal Preis_groß
        {
            get { return m_Preis_groß; }
            set
            {
                if (value != m_Preis_groß)
                {
                    this.m_Preis_groß = value;
                    RaisePropertyChanged(() => Preis_groß);
                }
            }
        }
        /// <summary>
        /// Zutaten der Speisen
        /// </summary>
        private ObservableCollection<Zutat> m_Zutaten;
        public ObservableCollection<Zutat> Zutaten
        {
            get { return m_Zutaten; }
            set
            {
                if (value != m_Zutaten)
                {
                    this.m_Zutaten = value;
                    RaisePropertyChanged(() => Zutaten);
                }
            }
        }
        /// <summary>
        /// ExtraZutaten zu den Speisen
        /// </summary>
        private ObservableCollection<ExtraZutat> m_ExtraZutaten;
        public ObservableCollection<ExtraZutat> ExtraZutaten
        {
            get { return m_ExtraZutaten; }
            set
            {
                if (value != m_ExtraZutaten)
                {
                    this.m_ExtraZutaten = value;
                    RaisePropertyChanged(() => ExtraZutaten);
                }
            }
        }        
        /// <summary>
        /// Typ der Speise
        /// </summary>
        private SpeiseTyp m_Typ;
        public SpeiseTyp Typ
        {
            get { return m_Typ; }
            set
            {
                if (value != m_Typ)
                {
                    this.m_Typ = value;
                    RaisePropertyChanged(() => Typ);
                }
            }
        }

        private decimal m_GesamtPreis;
        public decimal GesamtPreis
        {
            get { return m_GesamtPreis; }
            set
            {
                if (value != m_GesamtPreis)
                {
                    this.m_GesamtPreis = value;
                    RaisePropertyChanged(() => GesamtPreis);
                }
            }
        }

        private decimal m_AktuellerPizzaPreis;
        public decimal AktuellerPizzaPreis
        {
            get { return m_AktuellerPizzaPreis; }
            set
            {
                if (value != m_AktuellerPizzaPreis)
                {
                    this.m_AktuellerPizzaPreis = value;
                    RaisePropertyChanged(() => AktuellerPizzaPreis);
                }
            }
        }
        

        public SizeEnum Size { get; set; }
        
    }
}
